home *** CD-ROM | disk | FTP | other *** search
-
-
-
- C++ Overview
-
-
- by John Tal
-
-
-
-
-
-
-
-
- 1.0 C++ and C
-
- C++ is an object-oriented extension to the C language. C++ can be
- used to compile C programs. Everything you can do in C, you can also
- do in C++. C++ programs and their extensions cannot be compiled under
- a C only compiler.
-
- 2.0 Object-Oriented Programming
-
- 2.1 Class
-
- The class concept is the fundamental building block for all
- objected-oriented programming systems (OOPS). A class consists of an
- object (or group of objects) and the function(s) which operate on the
- obects(s). In C++, a class is defined in a similar way to a
- structure, except the keyword class is used:
-
- class FILE_C; // forward reference to a class
-
-
- 2.2 Class Components
-
- A class definition contains declarations for variables and functions.
- A class definition also provides different security areas for
- variables and functions.
-
- class FILE_C
- {
- private:
- long ptr; // file pointer
- char name[FNAME_LEN]; // file name
- short state; // file state
- short mode; // file mode
- public:
- FILE_C(void); // class constructor
- ~FILE_C(void); // class destructor
- short Open(char *,short); // open function
- short Close(void); // close function
- short Read(char *,short); // read function
- short Write(char *,short); // write function
- };
-
- The above FILE_C class has four private data items (objects) and six
- functions which operate on those objects. Any access to the class
- objects must occur through a class function. The private keyword
- enforces this data hiding by preventing the application using the
- class from having access to anything in the class private area. Only
- the class functions themselves can access private objects.
-
- 2.3 Class Constructors And Destructors
-
- The FILE_C class has a FILE_C() function as a constructor and a
- ~FILE_C() function as a destructor. The constructor is a function
- with the same name as the class which is invoked at the creation of
- an instance of the class and is intended to provide any
- initialization the class requires. The destructor function also
- has the same name as the class but with a '~' (tilde) character in
- front of it. A destructor is provided for any cleanup work to occur
- within the class at the termination of the class instance (such as
- making sure the file is closed).
-
- A class instance is created in two different ways. The first is by
- declaring a class instance in the same way a standard C language
- variable is created.
-
- short x; // create a variable named x
- FILE_C LogFile; // create a unique instance of the FILE_C class
-
-
- The second method of creating a class instance is by allocating a new
- instance through a pointer and the new keyword.
-
- FILE_C * pLogFile; // create a pointer to a FILE_C class
-
- pLogFile = new FILE_C; // create an instance and assign ptr
-
- The new keyword is provided as an improved calloc or malloc. The new
- keyword calculates the size of the memory block to be allocated to
- the item being created.
-
- 2.3.1 Constructors With Parameters
-
- Like any function, a constructor can take parameters. The
- parameters would be supplied at the time of the creation of a new
- class instance.
-
- class FILE_C
- {
- ...
- public:
- FILE_C(char *pFileName);
- };
-
- FILE_C LogFile("LogFileName"); // constructor with parm
-
-
- 2.4 Class Function Calling
-
- Class member functions are called like normal C functions. The
- difference is that they use syntax similar to that used for structure
- membership.
-
-
- FILE_C LogFile; // create instance of FILE_C
- FILE_C * pInputFile; // create ptr to instance of FILE_C
-
- pInputFile = new FILE_C; // create instance of FILE_C
-
- LogFile.Open("LogFile",O_APPEND); // open LogFile
-
- InputFile -> Open("InputDat",O_READONLY); // open InputFile
-
- InputFile -> Read(buffer,sizeof(buffer)); // read InputFile
-
-
- From the above example, a file pointer is never sent to the FILE_C
- functions as would be in standard C file functions. This is because
- each instance of the FILE_C maintains its own control information
- internal to the class itself in its own private area. C++ usually
- simplifies interfaces between classes and applications because
- classes are complete in themselves. They contain all the attributes
- and/or objects that describe the class within.
-
-
- 2.5 Class Function Declaration
-
- A class definition (such as class FILE_C ...) would occur in an
- include file. The actual functions of the class would be declared in
- a C++ source file. Each class function is prefixed with the class
- name to which it belongs and the symbol '::'.
-
- short FILE_C::Open(char * pFileName,short mode)
- {
- mode = mode; // referencing private data item
-
- strcpy(name,pFileName);
-
- // perform open
-
- return (status);
- }
-
-
- 2.6 Inline Functions
-
- If a class function is performing a very simple task, it can be
- declared an an inline function. An inline function is an expanded
- version of the function declaration within the class with begin and
- end braces surronding the inline statement(s).
-
- class FILE_C
- {
- private:
- char name[FNAME_LEN]; // file name
- ...
- public:
- FILE_C(char *pFileName) { strcpy(name,pFileName); }
- ...
- };
-
-
- The above example shows the FILE_C constructor implemented as an
- inline function. Inline functions should be limited to functions
- having only a few (preferrably one) statement(s).
-
-
- 3.0 Derived Classes
-
- One of C++' most powerful features is to use classes as building
- blocks in creating entirely new classes.
-
- class BROWSE_C : FILE_C // browse derived from file
- {
- private:
- short curline;
- ...
- public:
- BROWSE_C(void);
- ~BROWSE_C(void);
- OpenFile(char *);
- };
-
-
- From the above example, the BROWSE_C class will have access not only
- to all of its own member data/objects, but also to all FILE_C class
- member functions which were declared as public or protected in
- FILE_C. The following table breaks down class security areas for
- immediate classes and derived classes.
-
-
- Immediate Derived
- ---------- ---------
- Private Not-visible in derived class
- Protected Visible as Private in derived
- Public Visible as Protected in derived
-
- From the above example, the BROWSE_C class would be able to access
- any data and functions which were defined as protected or public in
- the FILE_C class. The application would not be able to access any of
- the data or functions of the FILE_C class without going through a
- public member function of the BROWSE_C class. These are the default
- security inheritance protocols for classes.
-
- 3.1 Customizing Class Inheritance
-
- The default security inheritance can be overridden when defining
- the derived class:
-
- class BROWSE_C : public FILE_C // browse derived from file
- {
- private:
- short curline;
- ...
- public:
- BROWSE_C(void);
- ~BROWSE_C(void);
- OpenFile(char *);
-
- };
-
- From the above example, all public functions of FILE_C class are also
- public to applications using the BROWSE_C class.
-
-
- 3.2 Container Classes
-
- Container classes are classes which contain other classes. An example
- would be a class to implement a binary tree:
-
- class TREE_C
- {
-
- private:
-
- struct TNODE_S // the contained class
- {
- PVOID pvData;
- struct TNODE_S *pstLeft;
- struct TNODE_S *pstRight;
- };
- typedef struct TNODE_S TNODE_T;
- typedef TNODE_T *TNODE_P;
- typedef TNODE_T **TNODE_PP;
-
- TNODE_P pstHead;
- TNODE_P pstNode;
- ...
-
- public:
-
- TREE_C(VOID);
- ~TREE_C(VOID);
- SHORT Delete(PVOID); // Remove entry
- SHORT Find(PVOID,PPVOID); // Find entry
- SHORT Insert(PVOID); // Insert entry
- ...
- };
-
- typedef TREE_C * TREE_CP;
- typedef TREE_C ** TREE_CPP;
-
- In the binary tree example, it was not desirable for each node of the
- tree to be an instance of the TREE_C class. So each node is
- contained in the TREE_C class and the TREE_C class operates on all
- the TNODE_S structures/classes contained within it.
-
- 3.3 Virtual Functions
-
- Virtual functions provide a way for a base class function to take on
- the characteristics or behavior appropriate to the current derived
- class.
-
- class FILE_C
- {
- private:
- char name[FNAME_LEN]; // file name
- ...
- public:
- FILE_C(char *pFileName) { strcpy(name,pFileName); }
- virtual short Reset(void);
- };
-
- class BROWSE_C : FILE_C // browse derived from file
- {
- private:
- short curline;
- ...
- public:
- BROWSE_C(void);
- ~BROWSE_C(void);
- OpenFile(char *);
- short Reset(void);
- };
-
- short BROWSE_C::Reset(void)
- {
- FILE_C::Reset();
- curline = 0;
- }
-
-
-
-
- 4.0 Operator Overloading
-
- Since C++ classes define in detail the characters of and operations
- upon the class instance, C++ allows all standard operators (i.e. '+',
- '-', '*', '/', '++', '--') to be redefined or overloaded for the
- current class.
-
- class STRING_C
- {
- private:
- char * pChar;
- int len;
- ...
- public:
- STRING_C(const char * = 0); // provide default value
- ~STRING_C(delete pChar);
- void operator+(char *)
- };
-
- STRING_C::operator+(char *pC)
- {
- char * pBuf;
- pBuf = new char[len=strlen(pC)+len];
- strcpy(pBuf,pChar);
- strcat(pBuf,pC);
- delete pChar;
- pChar = pBuf;
- }
-
-
- STRING_C Str("ABC");
-
- Str + "DEF"; // internal pChar now = 'ABCDEF'
-
-
- Operator overloading still involves functions to simulate the
- operator being overloaded. Overloading simply provides a mechanism
- for abbreviating the operations.
-
-
- 5.0 C++ Input/Output
-
- C++ output is simplified over that of C printf family functions. C++
- defines the keywords cout and cin and the stdout and stdin devices.
- C++ automatically formats the output based on the current variable
- type.
-
-
- /* In C */
-
- printf("%s = %d\n", szRate, sRate);
-
- // In C++
-
- cout << szRate << " = " << sRate << "\n";
-
-
- // Another C++ alternative
-
- cout << form("%s = %d\n", szRate,sRate);
-
-
- /* In C */
-
- scanf("%d",&sRate);
-
- // In C++
-
- cin >> sRate;
-
-
- 7.0 Reference Variables
-
- C++ provides a syntax which allows programmers who are not
- comfortable with C pointer syntax to more easily write applications
- which use pointers.
-
-
- /* In C */
-
- short Afunc(short * psShort)
- {
- *psShort++;
- }
-
-
- // In C++
-
- short Afunc(short & Short)
- {
- Short++;
- }
-
-
-
-
-
-
-
-
-
-
-
-